import os
import sys
import subprocess
import time
from datetime import datetime

def run_script(script_path, script_name):
    """运行指定的Python脚本"""
    print(f"\n{'='*60}")
    print(f"开始运行: {script_name}")
    print(f"脚本路径: {script_path}")
    print(f"开始时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print(f"{'='*60}")
    
    if not os.path.exists(script_path):
        print(f"错误：脚本文件不存在 - {script_path}")
        return False
    
    try:
        start_time = time.time()
        
        # 运行脚本
        result = subprocess.run(
            [sys.executable, script_path],
            capture_output=True,
            text=True,
            encoding='utf-8',
            cwd=os.path.dirname(script_path)
        )
        
        end_time = time.time()
        duration = end_time - start_time
        
        # 输出结果
        if result.stdout:
            print("\n--- 标准输出 ---")
            print(result.stdout)
        
        if result.stderr:
            print("\n--- 错误输出 ---")
            print(result.stderr)
        
        print(f"\n--- 执行结果 ---")
        print(f"返回码: {result.returncode}")
        print(f"执行时间: {duration:.2f} 秒")
        print(f"结束时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        
        if result.returncode == 0:
            print(f"{script_name} 执行成功！")
            return True
        else:
            print(f"{script_name} 执行失败！返回码: {result.returncode}")
            return False
            
    except Exception as e:
        print(f"运行 {script_name} 时发生异常: {e}")
        return False

def main():
    """主函数 - 依次运行问答生成脚本"""
    print("=== 问答对批量生成工具 ===")
    print(f"开始时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    
    # 获取当前脚本所在目录
    current_dir = os.path.dirname(os.path.abspath(__file__))
    print(f"当前工作目录: {current_dir}")
    
    # 定义要运行的脚本列表
    scripts = [
        {
            'name': 'JSON问答生成器',
            'filename': 'jsonQA_generator.py',
            'description': '处理JSON分段文件，生成问答对'
        },
        {
            'name': 'CSV问答生成器',
            'filename': 'csvQA_generator.py',
            'description': '处理CSV表格文件，生成问答对'
        },
        {
            'name': 'CSV统计问答生成器',
            'filename': 'csvQAtotal_generator.py',
            'description': '处理CSV表格文件，生成统计问答对'
        },
        {
            'name': 'CSV问答合并器',
            'filename': 'csvQA_all.py',
            'description': '合并同一水库的CSV问答对文件'
        }
    ]
    
    # 检查所有脚本是否存在
    print("\n--- 检查脚本文件 ---")
    missing_scripts = []
    for script in scripts:
        script_path = os.path.join(current_dir, script['filename'])
        if os.path.exists(script_path):
            print(f"{script['filename']} - 存在")
        else:
            print(f"{script['filename']} - 不存在")
            missing_scripts.append(script['filename'])
    
    if missing_scripts:
        print(f"\n错误：以下脚本文件不存在: {', '.join(missing_scripts)}")
        print("请确保所有必需的脚本文件都在当前目录中。")
        return
    
    # 依次运行脚本
    total_start_time = time.time()
    success_count = 0
    failed_scripts = []
    
    for i, script in enumerate(scripts, 1):
        script_path = os.path.join(current_dir, script['filename'])
        
        print(f"\n\n [{i}/{len(scripts)}] {script['description']}")
        
        success = run_script(script_path, script['name'])
        
        if success:
            success_count += 1
        else:
            failed_scripts.append(script['name'])
        
        # 如果不是最后一个脚本，等待一下
        if i < len(scripts):
            print("\n等待 2 秒后继续下一个脚本...")
            time.sleep(2)
    
    # 输出总结
    total_end_time = time.time()
    total_duration = total_end_time - total_start_time
    
    print(f"\n\n{'='*80}")
    print("=== 批量处理完成 ===")
    print(f"总执行时间: {total_duration:.2f} 秒")
    print(f"成功执行: {success_count}/{len(scripts)} 个脚本")
    
    if failed_scripts:
        print(f"失败的脚本: {', '.join(failed_scripts)}")
        print("\n部分脚本执行失败，请检查错误信息")
    else:
        print("\n所有脚本执行成功")
        print("\n问答对生成完成，请检查以下目录的输出文件:")
        print(f"  - JSON问答对: {os.path.join(current_dir, 'jsonQA')}")
        print(f"  - CSV合并后问答对: {os.path.join(current_dir, 'csvQA')}")
    
    print(f"结束时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print(f"{'='*80}")

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n\n用户中断执行")
    except Exception as e:
        print(f"\n\n程序执行过程中发生未预期的错误: {e}")
        import traceback
        traceback.print_exc()